
#pragma once

#include <boost/function.hpp>
#include <boost/shared_ptr.hpp>

namespace ConnectionBroker
{
   class Application;
   class Server;
   class ClientConnection;
   class Packet;
   class Channel;
   class Authenticator;
   class TcpClient;
   class TcpClientConnection;
   typedef boost::shared_ptr<Application> ApplicationPtr;
   typedef boost::shared_ptr<Server> ServerPtr;
   typedef boost::shared_ptr<ClientConnection> ClientConnectionPtr;
   typedef boost::shared_ptr<Channel> ChannelPtr;
   typedef boost::shared_ptr<Authenticator> AuthenticatorPtr;
   typedef boost::shared_ptr<TcpClient> TcpClientPtr;
   typedef boost::shared_ptr<TcpClientConnection> TcpClientConnectionPtr;

   typedef boost::function<void(TcpClientPtr, const Packet&)> messageCallback;
   typedef boost::function<void(TcpClientPtr, const std::vector<std::string>&)> channelsCallback;
   typedef boost::function<void(ApplicationPtr, ServerPtr, ClientConnectionPtr, const Packet&)> applicationCallback;
   typedef boost::function<void(ServerPtr, ClientConnectionPtr, const Packet&)> serverCallback;
}

